套用昨天所學的random
和之前的list
和for
迴圈,我們就可以在 Python 上設計出一個撲克牌洗牌發牌的程式出來,每次執行程式時,因為使用隨機數,所以可以讓發出的撲克牌順序都會不同。
import random # 引入 random 模組,用於生成隨機數
# 定義撲克牌的花色和點數
p = ['黑', '梅', '方', '紅'] # 花色,分別為黑桃、梅花、方塊、紅心
c = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'] # 點數,A到K
# 創建一個長度為 52 的列表,每個元素為 0 到 51,對應撲克牌的 52 張牌
poker = list(range(0, 52)) # 0-51 代表所有撲克牌的位置索引
# 洗牌過程:交換 1000 次隨機選擇的兩張牌的位置
for i in range(1, 1000): # 執行 1000 次交換
p1 = random.randint(0, 51) # 隨機生成第1張牌的索引
p2 = random.randint(0, 51) # 隨機生成第2張牌的索引
t = poker[p1] # 保存第1張牌
poker[p1] = poker[p2] # 第1張牌變成第2張牌
poker[p2] = t # 第2張牌變成第1張牌(交換完成)
# 發牌過程:將撲克牌分發給 4 名使用者,每人 13 張牌
px = 0 # 用來追踪已經發到哪一張牌
for i in range(1, 5): # 從 1 到 4 表示 4 名使用者
print(f'User[{i:>02}]: ', end='') # 格式化輸出使用者編號
for j in range(0, 13): # 每個使用者獲得 13 張牌
cc = poker[px] // 4 # 計算該牌的點數索引,除以4可以確定牌面點數
pp = poker[px] % 4 # 計算該牌的花色索引,取模4可以確定花色
px += 1 # 每發一張牌,px 增加1,表示下一張牌的位置
print(f'{p[pp]}{c[cc]}', end=' ') # 根據花色和點數組合輸出一張牌
print() # 每個使用者發完 13 張牌後換行
以下將從程式碼由上而下逐一做解釋
p = ['黑', '梅', '方', '紅']
:定義撲克牌的四種花色,分別代表黑桃、梅花、方塊、紅心。c = ['A', '2', '3', ..., 'K']
:定義撲克牌的13種點數,從 A 到 K。poker = list(range(0, 52))
:生成一個列表,包含數字 0 到 51,每個數字對應一張撲克牌(花色和點數的組合)。poker[px] // 4
計算點數(每 4 張牌具有相同的點數),poker[px] % 4
計算花色(4 種花色循環出現)。